package com.woniuxy.factory;

import javax.imageio.IIOException;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import java.util.Set;

/**
 *第四代工厂，贴近我们的spring的底层实现原理
 */

public class BeanFactory {

    //有key有value我们把它存起来
    static Map<String,String> map = new HashMap<>();
    //静态代码块中，要读取配置文件，加载配置文件中的数据，然后创建出对象
    //需求1 在系统启动的时候，加载配置文件中所有内容，调用getBean方法，才创建对象，并返回对应的实例（懒汉式）
    static {
        Properties properties = new Properties();
        InputStream resourceAsStream = ThirdFactory.class.getResourceAsStream("applicationContexts.properties");
        String personName = "";
        try{
            //加载配置文件
            properties.load(resourceAsStream);

            //从这里修改第三类工厂，加载配置文件以后，需要拿到所有的key和value
            Set<Object> keys = properties.keySet();
            for (Object key:keys) {
                //这里是value
                personName = properties.getProperty(key + "");
                map.put(key+"",personName);
            }
        } catch (IOException e){
            e.printStackTrace();
        }

    }
    //需求1的调用getBean的时候常见对象
    /**
     * 此时是需求1，getBean的时候才创建对象
     */
    public Object getBean(String name){
        String className = map.get(name);
        Object o = null;
        try{
            Class<?> aClass = Class.forName(className);
            o = aClass.newInstance();
        }catch (Exception e){
            e.printStackTrace();
        }
        return o;
    }
}
